"""
这个里面放页面的基础操作，比如：打开浏览器，点击，输入值，窗口的切换等等
"""
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support.wait import WebDriverWait


class Base:
    # 假设，我们浏览器驱动对象，放到成员变量里面
    def __init__(self, driver, url):
        self.__driver = driver  # 浏览器驱动对象
        self.__driver.get(url)  # 打开浏览器
        self.__driver.maximize_window()  # 最大化浏览器窗口

    # 关闭浏览器对象

    # 查找元素
    # loc:  元组里面包含了2个每一个定位方式，一个是值
    # -> WebElement :告诉调用者,这个方法返回的是一个元素
    def __element_find_wait(self, loc) -> WebElement:
        # self.__driver.find_element(*loc)  # *loc:  元组解包
        return WebDriverWait(self.__driver, 10).until(lambda x: x.find_element(*loc))

    #往输入框输入内容
    def element_send_keys(self,loc,value):
        self.__element_find_wait(loc).send_keys(value)
    #点击
    def element_click(self,loc):
        self.__element_find_wait(loc).click()

    #获取当前页面的url
    def get_url(self):
        return self.__driver.current_url

    #获取文本信息
    def get_text(self,loc):
        return self.__element_find_wait(loc).text


    #获取错误的信息
    def get_error_message(self):
        return self.get_text((By.CSS_SELECTOR,".layui-layer-content.layui-layer-padding"))


    def quit(self):
        self.__driver.quit()

if __name__ == '__main__': # 测试代码
    driver = webdriver.Edge()
    base = Base(driver, 'https://www.baidu.com/')
    base.element_send_keys((By.CSS_SELECTOR, '#kw'),"hahaha")

    time.sleep(3)
    base.quit()
